package com.leetcode;

/**
 * 给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
 * <p>
 * 输入：nums1 = [1,3], nums2 = [2]
 * 输出：2.00000
 * 解释：合并数组 = [1,2,3] ，中位数 2
 * <p>
 * 输入：nums1 = [1,2], nums2 = [3,4]
 * 输出：2.50000
 * 解释：合并数组 = [1,2,3,4] ，中位数 (2 + 3) / 2 = 2.5
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/median-of-two-sorted-arrays
 * <p>
 * <p>
 * 我的办法：使用归并
 */
public class 两个正序数组的中位数 {

    public static void main(String[] args) {
        //  nums1 = [1,2], nums2 = [3]
        // nums1 = [0,0], nums2 = [0,0]
        // nums1 = [2], nums2 = []
        System.out.println(findZjNum(new int[]{2}, new int[]{}));
    }


    /**
     * @param nums1 [0]
     * @param nums2 [1]
     * @return
     */
    public static double findZjNum(int[] nums1, int[] nums2) {
        int len1 = nums1.length;
        int len2 = nums2.length;

        int len = len1 + len2;

        int[] ints = new int[len];

        int i = 0, j = 0, p = 0;
        while (i < len1 && j < len2) {
            if (nums1[i] <= nums2[j]) {
                ints[p++] = nums1[i++];
            } else {
                ints[p++] = nums2[j++];
            }
        }
        while (i < len1) {
            ints[p++] = nums1[i++];
        }
        while (j < len2) {
            ints[p++] = nums2[j++];
        }

        double zjNum = 0.00;

        if (len % 2 == 0) {
            int mid = len / 2;
            zjNum = (double) (ints[mid] + ints[mid - 1]) / 2;
        } else {
            zjNum = (double) ints[len / 2];
        }

        return zjNum;
    }

}
